package com.fzg.common.demo.country;

import lombok.extern.slf4j.Slf4j;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Objects;

/**
 * create by fzg
 * 2022/11/17 13:45
 */

@Slf4j
public class CountryCity {

    public static void main(String[] args) {
        log.info(Objects.requireNonNull(getWorldAllCountrys("E:\\学习\\项目\\vue-vant-app\\myBlog\\myCaveolae_server\\src\\main\\java\\com\\fzg\\common\\demo\\country\\country.txt")).toString());
    }

    /**
     * 获取世界上所有国家中文名字和英文名
     * @return ArrayList<HashMap<String,Object>>
     */
    public static ArrayList<HashMap<String,Object>> getWorldAllCountrys(String url){
        File file = new File(url);
        BufferedReader bf;
        String data = "";
        try {
            bf = new BufferedReader(new FileReader(file));
            data = bf.readLine();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            log.info("文件未找到");
        } catch (IOException e) {
            e.printStackTrace();
            log.info("文件读取失败");
        }
        if (data.equals("")){
            log.info("文件内容为空");
        }else {
            log.info("文件读取成功");
            log.info(data);
            // 去掉大括号以及前面的字符，以及最后面的大括号以及分号
            String rData = data.substring(data.indexOf("{") + 1 , data.lastIndexOf("}"));
            log.info(rData);
            log.info(rData.indexOf("[") + "");
            log.info(rData.indexOf("]") + "");
            return convertStr(rData);
        }
        return null;
    }

    public static ArrayList<HashMap<String,Object>> convertStr(String str){
        ArrayList<HashMap<String, Object>> list = new ArrayList<>();
        // 第一个冒号之前的字符串去掉
        String str1 = str.substring(str.indexOf(":") + 1);
        log.info(str1);

        // 最后一个冒号后面的国家单独提出来
        String lastCountryStr = str1.substring(str1.lastIndexOf(":") + 1);
        log.info(lastCountryStr);

        // 最后一个国家字符串去掉两边的中括号
        String lastCountryStr1 = lastCountryStr.substring(lastCountryStr.indexOf("[") + 1, lastCountryStr.lastIndexOf("]"));
        log.info(lastCountryStr1);

        // 最后一个国家字符串根据逗号分割
        String[] lastCountryStr2 = lastCountryStr1.split(",");
        // 最后一个国家的中文名
        String lastCountryChineseName = removeQuotesBothSide(lastCountryStr2[0]);
        log.info(lastCountryChineseName);
        // 最后一个国家的英文名
        String lastCountryEnglishName = removeQuotesBothSide(lastCountryStr2[2]);
        log.info(lastCountryEnglishName);

        // 接下来就是剩余部分
        String str2 = str1.substring(0, str1.lastIndexOf(":"));
        log.info(str2);

        // str2是一个有规律的string，以冒号分割
        String[] str3 = str2.split(":");
        for (String s : str3) {
            HashMap<String, Object> map = new HashMap<>();
            log.info(s);
            // 去掉中括号两边的字符串
            String itemStr = removeStrBracketsBothSide(s);
            log.info(itemStr);
            // 第二个逗号之后的字符串就是国家英文名
            String englishName = removeQuotesBothSide(itemStr.substring(itemStr.indexOf(",", itemStr.indexOf(",") + 1)));
            log.info(englishName);
            map.put("englishName", englishName);
            // 第一个逗号之前的就是国家中文名
            String chineseName = removeQuotesBothSide(itemStr.substring(0, itemStr.indexOf(",")));
            log.info(chineseName);
            map.put("chineseName", chineseName);
            list.add(map);
        }
        // 最后put最后一个国家
        HashMap<String, Object> map = new HashMap<>();
        map.put("englishName",lastCountryChineseName);
        map.put("chineseName",lastCountryEnglishName);
        list.add(map);
        return list;
    }

    /**
     * 去掉引号
     * @param s 参数
     * @return String
     */
    public static String removeQuotesBothSide(String s){
        return s.substring(s.indexOf("'") + 1, s.lastIndexOf("'"));
    }

    public static String removeStrBracketsBothSide(String s){
        return s.substring(s.indexOf("[") + 1,s.lastIndexOf("]"));
    }

}
